#include <iostream>
#include "rpcapplication.h"
#include "user.pb.h"
#include "rpcchannel.h"

int main(int argc, char** argv)
{
    // 整个程序启动以后,想使用rpc框架来享受rpc服务调用,需要先调用框架的初始化函数
    RpcApplication::Init(argc, argv);

    // 演示调用远程发布的rpc方法Login
    fixbug::UserServiceRpc_Stub stub(new RpcChannel());
    // rpc方法的请求参数
    fixbug::LoginRequest request;
    request.set_name("zhangsan");
    request.set_pwd("123456");
    // rpc方法的响应
    fixbug::LoginResponse response;
    // 发起rpc方法的调用 同步的rpc调用过程 底层调用RpcChannel::callMethond
    stub.Login(nullptr, &request, &response, nullptr); // RpcChannel::callMethod 集中来做所有rpc方法调用的参数序列化和网络发送

    // 一次rpc调用完成 , 读取调用的结果
    if(0 == response.result().errcode())
    {
        std::cout << "rpc login response: " << response.success() << std::endl;
    }
    else
    {
        std::cout << "rpc login response error : " << response.result().errmsg() << std::endl;
    }
    

    // rpc方法的请求参数
    fixbug::RegisterRequest rsp;
    rsp.set_id(1);
    rsp.set_name("lisi");
    rsp.set_pwd("123456");
    // rpc方法的响应
    fixbug::RegisterResponse response1;
    // 发起rpc方法的调用 同步的rpc调用过程 底层调用RpcChannel::callMethond
    stub.Register(nullptr, &rsp, &response1, nullptr); // RpcChannel::callMethod 集中来做所有rpc方法调用的参数序列化和网络发送

    // 一次rpc调用完成 , 读取调用的结果
    if(0 == response1.result().errcode())
    {
        std::cout << "rpc register response: " << response1.success() << std::endl;
    }
    else
    {
        std::cout << "rpc register response error : " << response1.result().errmsg() << std::endl;
    }    return 0;
}